4 import controllers
.SelectionController
;
5 import controllers
.actions
.*;
7 import java
.awt
.event
.ActionEvent
;
8 import java
.awt
.event
.ActionListener
;
9 import java
.awt
.event
.KeyEvent
;
13 import javax
.swing
.undo
.*;
16 public class GraphFrame
extends JFrame
{
17 private static final long serialVersionUID
= -7929100929760152271L;
18 private SelectionController selectionController
;
19 private GraphPanel panel
;
20 private UndoManager undoManager
;
22 private JMenuBar menubar
;
23 private JMenu menuOptionFile
;
24 private JMenu menuOptionEdit
;
26 private JMenuItem menuOptionFileOpen
;
27 private JMenuItem menuOptionFileSave
;
28 private JMenuItem menuOptionFileClose
;
30 private JMenuItem menuOptionEditUndo
;
31 private JMenuItem menuOptionEditRedo
;
32 private JMenuItem menuOptionEditAddNode
;
33 private JMenuItem menuOptionEditAddEdge
;
34 private JMenuItem menuOptionEditRemoveNode
;
36 private ActionListener actionListener
;
38 public GraphFrame(GraphModel model
){
40 this.setTitle("Graph Editor");
41 this.setSize(500, 500);
42 menubar
= new JMenuBar();
43 this.setFocusable(true);
45 menuOptionFile
= new JMenu("File");
46 menuOptionFile
.setMnemonic(KeyEvent
.VK_F
);
47 menuOptionEdit
= new JMenu("Edit");
48 menuOptionEdit
.setMnemonic(KeyEvent
.VK_E
);
50 menuOptionFileClose
= new JMenuItem("Close program",KeyEvent
.VK_C
);
51 menuOptionFileClose
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_E
, Event
.CTRL_MASK
));
53 menuOptionFileOpen
= new JMenuItem("Openen",KeyEvent
.VK_O
);
54 menuOptionFileOpen
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_O
, Event
.CTRL_MASK
));
56 menuOptionEditUndo
= new JMenuItem("Ongedaan maken",KeyEvent
.VK_Z
);
57 menuOptionEditUndo
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_Z
, Event
.CTRL_MASK
));
59 menuOptionEditAddNode
= new JMenuItem("Knoop toevoegen",KeyEvent
.VK_N
);
60 menuOptionEditAddNode
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_N
, Event
.CTRL_MASK
));
62 menuOptionEditAddEdge
= new JMenuItem("Kant toevoegen",KeyEvent
.VK_M
);
63 menuOptionEditAddEdge
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_M
, Event
.CTRL_MASK
));
65 menuOptionEditRemoveNode
= new JMenuItem("Delete Node",KeyEvent
.VK_D
);
66 menuOptionEditRemoveNode
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_DELETE
,Event
.SHIFT_MASK
));
68 menuOptionEditRedo
= new JMenuItem("Herhalen",KeyEvent
.VK_R
);
69 menuOptionEditRedo
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_R
,Event
.CTRL_MASK
));
71 menuOptionFileSave
= new JMenuItem("Opslaan",KeyEvent
.VK_S
);
72 menuOptionFileSave
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_S
,Event
.CTRL_MASK
));
74 actionListener
= new ActionListener(){
75 public void actionPerformed(ActionEvent arg0
) {
76 if(arg0
.getSource() == menuOptionFileSave
)
78 else if(arg0
.getSource() == menuOptionFileClose
)
80 else if(arg0
.getSource() == menuOptionFileOpen
)
82 else if(arg0
.getSource() == menuOptionEditUndo
) {
84 notifyUndoManagerChanged();
85 } else if (arg0
.getSource() == menuOptionEditRedo
) {
87 notifyUndoManagerChanged();
88 } else if(arg0
.getSource() == menuOptionEditAddNode
) {
89 GraphFrame
.this.undoManager
.addEdit(new AddNode(GraphFrame
.this.selectionController
));
90 notifyUndoManagerChanged();
91 } else if(arg0
.getSource() == menuOptionEditAddEdge
) {
92 selectionController
.doAddEdge();
93 notifyUndoManagerChanged();
94 } else if(arg0
.getSource() == menuOptionEditRemoveNode
) {
95 undoManager
.addEdit(new DeleteNode(selectionController
));
96 notifyUndoManagerChanged();
101 menuOptionFileOpen
.addActionListener(actionListener
);
102 menuOptionFileSave
.addActionListener(actionListener
);
103 menuOptionFileClose
.addActionListener(actionListener
);
105 menuOptionEditAddNode
.addActionListener(actionListener
);
106 menuOptionEditAddEdge
.addActionListener(actionListener
);
107 menuOptionEditUndo
.addActionListener(actionListener
);
108 menuOptionEditRedo
.addActionListener(actionListener
);
109 menuOptionEditRemoveNode
.addActionListener(actionListener
);
111 menuOptionFile
.add(menuOptionFileOpen
);
112 menuOptionFile
.add(menuOptionFileSave
);
113 menuOptionFile
.addSeparator();
114 menuOptionFile
.add(menuOptionFileClose
);
116 menuOptionEdit
.add(menuOptionEditAddNode
);
117 menuOptionEdit
.add(menuOptionEditAddEdge
);
118 menuOptionEdit
.addSeparator();
119 menuOptionEdit
.add(menuOptionEditUndo
);
120 menuOptionEdit
.add(menuOptionEditRedo
);
121 menuOptionEdit
.add(menuOptionEditRemoveNode
);
123 menubar
.add(menuOptionFile
);
124 menubar
.add(menuOptionEdit
);
125 setJMenuBar(menubar
);
127 panel
= new GraphPanel(model
);
129 undoManager
= new UndoManager();
130 this.notifyUndoManagerChanged();
135 private void openFile()
137 final JFileChooser fc
= new JFileChooser();
138 int returnVal
= fc
.showOpenDialog(this);
139 if(returnVal
== JFileChooser
.APPROVE_OPTION
){
140 doOpenFile(fc
.getSelectedFile());
144 private void notifyUndoManagerChanged(){
145 menuOptionEditRedo
.setEnabled(undoManager
.canRedo());
146 menuOptionEditUndo
.setEnabled(undoManager
.canUndo());
148 menuOptionEditRedo
.setText(this.undoManager
.getRedoPresentationName());
149 menuOptionEditUndo
.setText(this.undoManager
.getUndoPresentationName());
153 private void doOpenFile(File f
) {
155 GraphModel model
= GraphModel
.fromFile(f
);
156 panel
.setModel(model
);
157 this.undoManager
.discardAllEdits();
158 notifyUndoManagerChanged();
159 } catch (Exception e
) {
160 JOptionPane
.showMessageDialog(this,
161 "An error occured trying to read the input file. \r\n" + e
.getMessage(),
162 "Error", JOptionPane
.ERROR_MESSAGE
);
166 private void saveFile()
168 final JFileChooser fc
= new JFileChooser();
169 int returnVal
= fc
.showSaveDialog(this);
170 if(returnVal
== JFileChooser
.APPROVE_OPTION
){
171 File file
= fc
.getSelectedFile();
173 panel
.getModel().writeToFile(file
);
175 JOptionPane
.showMessageDialog(this,
176 "An error occured trying to save the current state to a file. \r\n" + e
.getMessage() ,
177 "Error", JOptionPane
.ERROR_MESSAGE
);
182 public void addAction(UndoableEdit action
){
183 undoManager
.addEdit(action
);
184 notifyUndoManagerChanged();
187 public void selectedObject(boolean selected
) {
188 menuOptionEditAddEdge
.setEnabled(selected
);
189 menuOptionEditRemoveNode
.setEnabled(selected
);
192 public void setSelectionController(SelectionController s
) {
193 selectionController
= s
;
194 this.getPanel().setSelectionController(s
);
196 public GraphPanel
getPanel()